package base.util.lib;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *数字处理
 */
@SuppressWarnings("all")
public class NumberUtil {
	public static String patternPrint(String pattern, Double obj) {
		DecimalFormat df = new DecimalFormat(pattern);
		String str = "";
		try {
			str = df.format(obj);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return str;
	}
	/**
	 * 将数字类型字符转换成 大写人民币字符
	 * 最大长度为12长度
	 * @param small   123456789123   or 123456789123.89
	 * @return String
	 */
	public static String toSmallBig(String small) {
		String temp = "";
		if (small.indexOf(".") > -1) {
			temp = small.substring(0, small.indexOf("."));
		} else {
			temp = small;
		}
		if (temp.length() > 12) {
			System.out.println("不在计算范围之内！");
			return small;
		}
		String BigWrite = "";		//用于返回大写的钱数
		String Bignum = "";			//用于存放每一个阿拉伯数字对应的汉字
		String RMB = "";			//用于存放人民币单位
		int moneyplace;				//用于确定人民币的精度 最多只能精确到分
		int dotplace=0;				//-确定小数点的位置
		int moneynum = 0;			//--人民币的位数
		if (small.indexOf(".") == -1) {
			dotplace = 0;
		} else {
			// --用内置函数instr确定小数点的位置
			dotplace = small.indexOf(".") + 1;
		}
		// --确定人民币的精度 如果小数点位置为0则精度只要精确到元
		// --否则按小数点的位置 来确定人民币的精度
		if (dotplace == 0) {
			moneyplace = 0;
		} else {
			moneyplace = dotplace - small.length();
		}
		// --通过一个for 循环将samllmoney 中的阿拉伯数字逐一取出来
		// --注意该for 循环时按照降序循环的
		for (int i = 1; i <= small.length(); i++) {
			moneynum = i;
			if (moneynum != dotplace) {
				int size = small.length() - moneynum + 1;
				String index = small.substring(size - 1, size);

				if (index.equals("1")) {
					Bignum = "壹";
				}
				if (index.equals("2")) {
					Bignum = "贰";
				}
				if (index.equals("3")) {
					Bignum = "叁";
				}
				if (index.equals("4")) {
					Bignum = "肆";
				}
				if (index.equals("5")) {
					Bignum = "伍";
				}
				if (index.endsWith("6")) {
					Bignum = "陆";
				}
				if (index.equals("7")) {
					Bignum = "柒";
				}
				if (index.equals("8")) {
					Bignum = "捌";
				}
				if (index.equals("9")) {
					Bignum = "玖";
				}
				if (index.equals("0")) {
					Bignum = "零";
				}
				// --case 循环来设置smallmoney 里对应的阿拉伯数字的相应的精度
				if (moneyplace == -2) {
					RMB = "分";
				}
				if (moneyplace == -1) {
					RMB = "角";
				}
				if (moneyplace == 0) {
					RMB = "元";
				}
				if (moneyplace == 1) {
					RMB = "拾";
				}
				if (moneyplace == 2) {
					RMB = "佰";
				}
				if (moneyplace == 3) {
					RMB = "仟";
				}
				if (moneyplace == 4) {
					RMB = "萬";
				}
				if (moneyplace == 5) {
					RMB = "拾";
				}
				if (moneyplace == 6) {
					RMB = "佰";
				}
				if (moneyplace == 7) {
					RMB = "仟";
				}
				if (moneyplace == 8) {
					RMB = "亿";
				}
				if (moneyplace == 9) {
					RMB = "拾";
				}
				if (moneyplace == 10) {
					RMB = "佰";
				}
				if (moneyplace == 11) {
					RMB = "仟";
				}
				moneyplace = moneyplace + 1;
				BigWrite = Bignum + RMB + BigWrite;

			}
		}
		return BigWrite;
	}
	/**
	 * 
	create or replace function smalltobig(smallmoney varchar2) return varchar2 is
	  BigWrite   varchar2(60); --用于返回大写的钱数
	  Bignum     varchar2(2); --用于存放每一个阿拉伯数字对应的汉字
	  RMB        varchar2(2); --用于存放人民币单位
	  moneyplace number; --用于确定人民币的精度  最多只能精确到分
	  dotplace   number; --确定小数点的位置
	  moneynum   number; --人民币的位数
	  myexception exception; --自定义异常
	begin
	  --用内置函数instr确定小数点的位置
	  dotplace := instr(smallmoney, '.');
	  --判断是否超出本函数定义的精度范围
	
	  if (length(smallmoney) > 14) then
	    raise myexception;
	  end if;
	
	  --确定人民币的精度 如果小数点位置为0则精度只要精确到元
	  --否则按小数点的位置 来确定人民币的精度
	
	  if dotplace = 0 then
	    moneyplace := 0;
	  else
	    moneyplace := dotplace - length(smallmoney);
	  end if;
	
	  --通过一个for 循环将samllmoney 中的阿拉伯数字逐一取出来
	  --注意该for 循环时按照降序循环的
	  for moneynum in reverse 1 .. length(smallmoney) loop
	    --如果位置在小数点的位置 则不做任何处理
	    if moneynum <> dotplace then
	      --case 循环将smallmoney 里对应的阿拉伯数字用汉语表示
	      case substr(smallmoney, moneynum, 1)
	        when '1' then
	          Bignum := '壹';
	        when '2' then
	          Bignum := '贰';
	        when '3' then
	          Bignum := '叁';
	        when '4' then
	          Bignum := '肆';
	        when '5' then
	          Bignum := '伍';
	        when '6' then
	          Bignum := '陆';
	        when '7' then
	          Bignum := '柒';
	        when '8' then
	          Bignum := '捌';
	        when '9' then
	          Bignum := '玖';
	        when '0' then
	          Bignum := '零';
	      end case;
	    
	      --case 循环来设置smallmoney 里对应的阿拉伯数字的相应的精度
	      case moneyplace
	      
	        when '-2' then
	          RMB := '分';
	        when '-1' then
	          RMB := '角';
	        when '0' then
	          RMB := '元';
	        when '1' then
	          RMB := '拾';
	        when '2' then
	          RMB := '佰';
	        when '3' then
	          RMB := '仟';
	        when '4' then
	          RMB := '萬';
	        when '5' then
	          RMB := '拾';
	        when '6' then
	          RMB := '佰';
	        when '7' then
	          RMB := '仟';
	        when '8' then
	          RMB := '亿';
	        when '9' then
	          RMB := '拾';
	        when '10' then
	          RMB := '佰';
	        when '11' then
	          RMB := '仟';
	      end case;
	      moneyplace := moneyplace + 1;
	    
	      if BigWrite is null then
	        BigWrite := Bignum || RMB;
	      else
	        BigWrite := Bignum || RMB || BigWrite;
	      
	      end if;
	    end if;
	  end loop;
	
	  return BigWrite;
	EXCEPTION
	  --异常处理部分
	  when myexception then
	    dbms_output.put_line('异常 14');
	  when others then
	    dbms_output.put_line('异常 other');
	  
	end;

	 */
}
